home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / netlink.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  6KB  |  189 lines

  1. #ifndef __LINUX_NETLINK_H
  2. #define __LINUX_NETLINK_H
  3.  
  4. #include <linux/socket.h> /* for sa_family_t */
  5. #include <linux/types.h>
  6.  
  7. #define NETLINK_ROUTE        0    /* Routing/device hook                */
  8. #define NETLINK_SKIP        1    /* Reserved for ENskip              */
  9. #define NETLINK_USERSOCK    2    /* Reserved for user mode socket protocols     */
  10. #define NETLINK_FIREWALL    3    /* Firewalling hook                */
  11. #define NETLINK_TCPDIAG        4    /* TCP socket monitoring            */
  12. #define NETLINK_NFLOG        5    /* netfilter/iptables ULOG */
  13. #define NETLINK_XFRM        6    /* ipsec */
  14. #define NETLINK_SELINUX        7    /* SELinux event notifications */
  15. #define NETLINK_ARPD        8
  16. #define NETLINK_AUDIT        9    /* auditing */
  17. #define NETLINK_ROUTE6        11    /* af_inet6 route comm channel */
  18. #define NETLINK_IP6_FW        13
  19. #define NETLINK_DNRTMSG        14    /* DECnet routing messages */
  20. #define NETLINK_KOBJECT_UEVENT    15    /* Kernel messages to userspace */
  21. #define NETLINK_TAPBASE        16    /* 16 to 31 are ethertap */
  22.  
  23. #define MAX_LINKS 32        
  24.  
  25. struct sockaddr_nl
  26. {
  27.     sa_family_t    nl_family;    /* AF_NETLINK    */
  28.     unsigned short    nl_pad;        /* zero        */
  29.     __u32        nl_pid;        /* process pid    */
  30.            __u32        nl_groups;    /* multicast groups mask */
  31. };
  32.  
  33. struct nlmsghdr
  34. {
  35.     __u32        nlmsg_len;    /* Length of message including header */
  36.     __u16        nlmsg_type;    /* Message content */
  37.     __u16        nlmsg_flags;    /* Additional flags */
  38.     __u32        nlmsg_seq;    /* Sequence number */
  39.     __u32        nlmsg_pid;    /* Sending process PID */
  40. };
  41.  
  42. /* Flags values */
  43.  
  44. #define NLM_F_REQUEST        1    /* It is request message.     */
  45. #define NLM_F_MULTI        2    /* Multipart message, terminated by NLMSG_DONE */
  46. #define NLM_F_ACK        4    /* Reply with ack, with zero or error code */
  47. #define NLM_F_ECHO        8    /* Echo this request         */
  48.  
  49. /* Modifiers to GET request */
  50. #define NLM_F_ROOT    0x100    /* specify tree    root    */
  51. #define NLM_F_MATCH    0x200    /* return all matching    */
  52. #define NLM_F_ATOMIC    0x400    /* atomic GET        */
  53. #define NLM_F_DUMP    (NLM_F_ROOT|NLM_F_MATCH)
  54.  
  55. /* Modifiers to NEW request */
  56. #define NLM_F_REPLACE    0x100    /* Override existing        */
  57. #define NLM_F_EXCL    0x200    /* Do not touch, if it exists    */
  58. #define NLM_F_CREATE    0x400    /* Create, if it does not exist    */
  59. #define NLM_F_APPEND    0x800    /* Add to end of list        */
  60.  
  61. /*
  62.    4.4BSD ADD        NLM_F_CREATE|NLM_F_EXCL
  63.    4.4BSD CHANGE    NLM_F_REPLACE
  64.  
  65.    True CHANGE        NLM_F_CREATE|NLM_F_REPLACE
  66.    Append        NLM_F_CREATE
  67.    Check        NLM_F_EXCL
  68.  */
  69.  
  70. #define NLMSG_ALIGNTO    4
  71. #define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
  72. #define NLMSG_LENGTH(len) ((len)+NLMSG_ALIGN(sizeof(struct nlmsghdr)))
  73. #define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))
  74. #define NLMSG_DATA(nlh)  ((void*)(((char*)nlh) + NLMSG_LENGTH(0)))
  75. #define NLMSG_NEXT(nlh,len)     ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \
  76.                   (struct nlmsghdr*)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))
  77. #define NLMSG_OK(nlh,len) ((len) >= (int)sizeof(struct nlmsghdr) && \
  78.                (nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \
  79.                (nlh)->nlmsg_len <= (len))
  80. #define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len)))
  81.  
  82. #define NLMSG_NOOP        0x1    /* Nothing.        */
  83. #define NLMSG_ERROR        0x2    /* Error        */
  84. #define NLMSG_DONE        0x3    /* End of a dump    */
  85. #define NLMSG_OVERRUN        0x4    /* Data lost        */
  86.  
  87. struct nlmsgerr
  88. {
  89.     int        error;
  90.     struct nlmsghdr msg;
  91. };
  92.  
  93. #define NET_MAJOR 36        /* Major 36 is reserved for networking                         */
  94.  
  95. enum {
  96.     NETLINK_UNCONNECTED = 0,
  97.     NETLINK_CONNECTED,
  98. };
  99.  
  100. #ifdef __KERNEL__
  101.  
  102. #include <linux/capability.h>
  103. #include <linux/skbuff.h>
  104.  
  105. struct netlink_skb_parms
  106. {
  107.     struct ucred        creds;        /* Skb credentials    */
  108.     __u32            pid;
  109.     __u32            groups;
  110.     __u32            dst_pid;
  111.     __u32            dst_groups;
  112.     kernel_cap_t        eff_cap;
  113. };
  114.  
  115. #define NETLINK_CB(skb)        (*(struct netlink_skb_parms*)&((skb)->cb))
  116. #define NETLINK_CREDS(skb)    (&NETLINK_CB((skb)).creds)
  117.  
  118.  
  119. extern struct sock *netlink_kernel_create(int unit, void (*input)(struct sock *sk, int len));
  120. extern void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err);
  121. extern int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 pid, int nonblock);
  122. extern int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, __u32 pid,
  123.                  __u32 group, int allocation);
  124. extern void netlink_set_err(struct sock *ssk, __u32 pid, __u32 group, int code);
  125. extern int netlink_register_notifier(struct notifier_block *nb);
  126. extern int netlink_unregister_notifier(struct notifier_block *nb);
  127.  
  128. /* finegrained unicast helpers: */
  129. struct sock *netlink_getsockbyfilp(struct file *filp);
  130. int netlink_attachskb(struct sock *sk, struct sk_buff *skb, int nonblock, long timeo);
  131. void netlink_detachskb(struct sock *sk, struct sk_buff *skb);
  132. int netlink_sendskb(struct sock *sk, struct sk_buff *skb, int protocol);
  133.  
  134. /*
  135.  *    skb should fit one page. This choice is good for headerless malloc.
  136.  */
  137. #define NLMSG_GOODORDER 0
  138. #define NLMSG_GOODSIZE (SKB_MAX_ORDER(0, NLMSG_GOODORDER))
  139.  
  140.  
  141. struct netlink_callback
  142. {
  143.     struct sk_buff    *skb;
  144.     struct nlmsghdr    *nlh;
  145.     int        (*dump)(struct sk_buff * skb, struct netlink_callback *cb);
  146.     int        (*done)(struct netlink_callback *cb);
  147.     int        family;
  148.     long        args[4];
  149. };
  150.  
  151. struct netlink_notify
  152. {
  153.     int pid;
  154.     int protocol;
  155. };
  156.  
  157. static __inline__ struct nlmsghdr *
  158. __nlmsg_put(struct sk_buff *skb, u32 pid, u32 seq, int type, int len)
  159. {
  160.     struct nlmsghdr *nlh;
  161.     int size = NLMSG_LENGTH(len);
  162.  
  163.     nlh = (struct nlmsghdr*)skb_put(skb, NLMSG_ALIGN(size));
  164.     nlh->nlmsg_type = type;
  165.     nlh->nlmsg_len = size;
  166.     nlh->nlmsg_flags = 0;
  167.     nlh->nlmsg_pid = pid;
  168.     nlh->nlmsg_seq = seq;
  169.     return nlh;
  170. }
  171.  
  172. #define NLMSG_PUT(skb, pid, seq, type, len) \
  173. ({ if (skb_tailroom(skb) < (int)NLMSG_SPACE(len)) goto nlmsg_failure; \
  174.    __nlmsg_put(skb, pid, seq, type, len); })
  175.  
  176. extern int netlink_dump_start(struct sock *ssk, struct sk_buff *skb,
  177.                   struct nlmsghdr *nlh,
  178.                   int (*dump)(struct sk_buff *skb, struct netlink_callback*),
  179.                   int (*done)(struct netlink_callback*));
  180.  
  181.  
  182. #define NL_NONROOT_RECV 0x1
  183. #define NL_NONROOT_SEND 0x2
  184. extern void netlink_set_nonroot(int protocol, unsigned flag);
  185.  
  186. #endif /* __KERNEL__ */
  187.  
  188. #endif    /* __LINUX_NETLINK_H */
  189.